package com.wksc.framework.impexp.template;

import com.wksc.framework.impexp.bean.Header;
import com.wksc.framework.impexp.mode.Mode;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p> Title(文件名): ImpTemplate.java </p>
 * <p> Description(描述): TODO </p>
 * <p> Copyright(版权): Copyright (c) 2011 </p>
 * <p> Company(公司): 成都四方信息技术有限公司 </p>
 * <p> CreateTime(生成日期)：2011-10-25下午04:07:35 </p>
 * @author wanglei
 * @version impExp_C13
 */
public class ImpTemplate extends BaseTemplate {
	
	private static final long serialVersionUID = -9080472636711579446L;

	/**导入业务处理代码的业务处理具体实现类, 需要带完整包名,类名的字符串*/
	private String impService;

    /**能够区分数据是否重复的关键列在导入完整表头中的索引值*/
    private Map<Byte, List<Byte>> keyRowsIndexMap = new HashMap<Byte, List<Byte>>(3);
    //导入文件的格式,支持excel,csv,txt,默认为excel
    private Mode impFileMode = Mode.IMP_XLS;

    /**
     * 导入模板的构造函数
     *
     * @param operator   操作用户
     * @param typeName   导入导出的模块类型
	 * @param operatObj 操作对象
     * @param fullHeader 完整表头信息
     * @param fileName 文件名
     */
	public ImpTemplate(String operator, String typeName, int operatObj,
			Header[] fullHeader, String fileName) {
		super(operator, typeName, operatObj, fullHeader);
		this.fileName = fileName;
		init();
	}

	/**
     * 初始化导入模板必要参数
     */
    private void init() {
    	List<Byte> colList = null;
    	//循环导入列头
    	for(int i = 0; i < fullHeader.length; i++){
    		//当前列头为关键列
    		if(fullHeader[i].isKeyCol()) {
    			//当前列所在分组已经在Map中,并将当前列索引加入到集合中
    			if (keyRowsIndexMap.containsKey(fullHeader[i].getGroup())) {
    				keyRowsIndexMap.get(fullHeader[i].getGroup()).add((byte)i);
    			} else {//当前列所有分组不在Map中,创建一个集合并将当前列的索引加入到集合中,再存入Map
    				colList = new ArrayList<Byte>(3);
    				colList.add((byte)i);
    				keyRowsIndexMap.put(fullHeader[i].getGroup(), colList);
    			}
    		}
    	}
    }

    /*=========setters & getters==============*/
	public String getImpService() {
		return impService;
	}

	public void setImpService(String impService) {
		this.impService = impService;
	}

    public Map<Byte, List<Byte>> getKeyRowsIndexMap() {
        return keyRowsIndexMap;
    }

    public void setKeyRowsIndexMap(Map<Byte, List<Byte>> keyRowsIndexMap) {
        this.keyRowsIndexMap = keyRowsIndexMap;
    }

    /**
     * 导入文件的格式,支持excel,csv,txt,默认为excel
     * @return 文件格式枚举对象
     */
	public Mode getImpFileMode() {
		return impFileMode;
	}
	/**
	 * 导入文件的格式,支持excel,csv,txt,默认为excel
	 * @param impFileMode 文件格式枚举对象
	 */
	public void setImpFileMode(Mode impFileMode) {
		this.impFileMode = impFileMode;
	}
    
    
    /*=========setters & getters==============*/
}
